#include <iostream>
#include <vector>
#include <cstring>
using namespace std;
const int N=27;

int st[N];
int edge[N][N];
int dist[N][N];

int n,m;
void floyd()
{
	memcpy(dist,edge,sizeof(dist));
	for(int k=0;k<n;k++)
	{
		for(int i=0;i<n;i++)
		{
			for(int j=0;j<n;j++)
			{
				dist[i][j]|=dist[i][k]&& dist[k][j];
			}
		}
	}
}
int check()
{
	for(int i=0;i<n;i++)
	{
		if(dist[i][i])
			return 2;
	}
	for(int i=0;i<n;i++)
	{

		for(int j=0;j<i;j++)
		{
			if(!dist[i][j] && !dist[j][i])
				return 0;
		}
	}
	
	return 1;
	
}
char get_min()
{
	for(int i=0;i<n;i++)
	{
		if(st[i])
			continue;
		bool flg=true;
		for(int j=0;j<n && flg;j++){
			if(dist[j][i] && st[j]==0)
				flg=false;
		}
		if(flg)
		{
			st[i]=1;
			return i+'A';
		}
	}
}
int main()
{
	while(cin>>n>>m,n||m)
	{
		int type=0;
		int pos=0;
		memset(edge,0,sizeof(edge));
		memset(st,0,sizeof(st));
		for(int i=1;i<=m;i++)
		{
			string str;
			cin>>str;
			
			int a=str[0]-'A',b=str[2]-'A';
			if(!type)
			{
				edge[a][b]=1;
				floyd();
				type=check();
				if(type)
				{
					pos=i;
				}
			}
		}

		if(type==2)
		{
			printf("Inconsistency found after %d relations.\n",pos);
		}
		else if(type==0)
		{
			cout<<"Sorted sequence cannot be determined."<<endl;
		}
		else{
			printf("Sorted sequence determined after %d relations: ",pos);
			for(int i=0;i<n;i++)
			{
				cout<<get_min();
			}
			cout<<"."<<endl;
		}
		
	}
	
	return 0;
}
